package final_;

import com.sun.org.apache.bcel.internal.generic.NEW;

/**
 * @Author 小闽
 * @Date 2024/9/10 17:30
 * @PackageName: final_
 * @ClassName: FinalDetail
 * @Description: final关键字细节
 * @Version 1.0
 */
public class FinalDetail {
    public static void main(String[] args) {
        MMM mmm = new MMM();
        NNN nnn = new NNN();
        nnn.test();
    }
}

class AAA{
    /**
     * ①	定义时：如public final double TAX_RATE=0.08;
     * ②	在构造器中
     * ③	在代码块中
     */
    public final double TAX_RATE=0.08;
    public final double TAX_RATE01;
    public final double TAX_RATE02;
    public AAA(){
        TAX_RATE01 = 0.09;
    }
    {
        TAX_RATE02 = 1.00;
    }
    /**
     * 3）	如果final修饰的属性是静态的，
     *      则初始化的位置只能是①定义时②在静态代码块 不能在构造器中赋值。
     */
    public final static double TAX_RATE03=0.01;
    public final static double TAX_RATE05;
    static {
        TAX_RATE05 = 1.23;
    }

}

//4）	Final类不能继承，但是可以实例化对象。
final class MMM{
    /**
     * 构造方法
     */
    public MMM() {
        System.out.println("这是MMM构造方法被执行...");
    }
}
//5）	如果类不是final类，但是含有final方法，则该方法虽然不能重写，但是可以被继承。
class CCC {
    public CCC() {
        System.out.println("这是CCC构造方法被执行...");
    }
    //有final方法
    public final void test(){
        System.out.println("这是final方法...");
    }
}

class NNN extends CCC{
    public NNN() {
        System.out.println("NNN的构造方法被执行...");
    }
}
